#include<iostream>
#include<pthread.h>
#include<unistd.h>
#include<vector>
#include<string>
//这个文件夹将进行互斥的练习，也就是最主要的：锁

int ticket1 = 1000;
//模拟一个抢票系统

//可以清晰的看见下面的代码，会一直见到负数，md强个负数的票是不是很扯，所以此时需要上锁，有两种上锁的方式，一种是全局锁如下所示
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;//全局锁
void* ticket(void* agrc)
{
    char* name = (char*)agrc;
    while(1)
    {
        if(ticket1  > 0)
        {
            pthread_mutex_lock(&lock);  //线程一进来先锁住，让只能自己访问这部分代码
            usleep(1000);
            printf("%s 抢到了票 , 票数：%d\n",name,ticket1--);
            pthread_mutex_unlock(&lock);  //访问完就解锁
        }
        else
        {
            //此时票没了，它的存在已经没有了意义
            pthread_mutex_unlock(&lock);  //访问完就解锁
            break;
        }
    }
    return nullptr;
}

int main()
{
    pthread_t tid;
    pthread_create(&tid,nullptr,ticket,(void*)"thread-1");
    pthread_create(&tid,nullptr,ticket,(void*)"thread-2");
    pthread_create(&tid,nullptr,ticket,(void*)"thread-3");
    pthread_create(&tid,nullptr,ticket,(void*)"thread-4");

    //一个一个的进行线程等待
    pthread_join(tid,nullptr);
    pthread_join(tid,nullptr);
    pthread_join(tid,nullptr);
    pthread_join(tid,nullptr);
    return 0;
}